/*
 *      This program is free software; you can redistribute it and/or modify
 *      it under the terms of the GNU General Public License as published by
 *      the Free Software Foundation; either version 2 of the License, or
 *      (at your option) any later version.
 *      
 *      This program is distributed in the hope that it will be useful,
 *      but WITHOUT ANY WARRANTY; without even the implied warranty of
 *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *      GNU General Public License for more details.
 *      
 *      You should have received a copy of the GNU General Public License
 *      along with this program; if not, write to the Free Software
 *      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 *      MA 02110-1301, USA.
 */

package common;

import java.lang.reflect.*;

/**
 *реализация разных вспомогательным методов для упрщения портирования с питона.
 */
public class Evaluator
{

    /**
     *динамический вызов метода у произвольного объекта
     *@param inst экземпляр объекта для которого требуется вызвать метод
     *@param mthName имя вызываемого метода
     *@param args список вызываемых параметров. в случае если метод не принимает параметров седует передвть null
     *@return возвращает результат вызова метода
     */
    public static Object callMethod(Object inst, String mthName, Object ... args) throws NoSuchMethodException, 
											 SecurityException, 
											 IllegalAccessException,
											 InvocationTargetException
    {
	Method	mth    = null;
	Class	iClass = null;
	Class[] pDescr = null;

	iClass = inst.getClass();

	if(args != null)
	    {
		pDescr = new Class[args.length];
		for(int i = 0; i < args.length; i++)
		    {
			pDescr[i] = args[i].getClass();
		    }
		mth = iClass.getMethod(mthName, pDescr);
	    }
	else
	    {
		mth = iClass.getMethod(mthName);
	    }
	return mth.invoke(inst, args);
    }
}